#pragma once

#ifndef MEASUREMENTOBJECT_H
#define MEASUREMENTOBJECT_H

#include <iostream>
#include <boost/shared_ptr.hpp>
#include "measurement/MeasBase.hpp"

namespace measurement {

#define MO_CATEGORY_DATA_SOURCE     "Data Source"
#define MO_CATEGORY_DATA_PROCESSOR  "Data Processor"
#define MO_CATEGORY_VISUALIZATION   "Visualization"

enum MOType {
    DataSource, DataProcessor,
    Visualization
};

typedef std::wstring    MeasObjWDetail;
typedef std::string     MeasObjSDetail;
typedef enum MOType     MeasObjType;
typedef unsigned char   MeasObjIndex;

struct MeasurementObject {
    const MeasObjWDetail name;
    const MeasObjWDetail author;
    const MeasObjType type;
    const MeasObjWDetail inputType;
    const MeasObjWDetail outputType;
    const MeasObjSDetail path;
    const MeasObjSDetail category;
    const MeasObjIndex   index;

    MeasurementObject(MeasObjWDetail _name,
                      MeasObjWDetail _author,
                      MeasObjType    _type,
                      MeasObjWDetail _inType,
                      MeasObjWDetail _outType,
                      MeasObjSDetail _path,
                      MeasObjSDetail _category,
                      MeasObjIndex   _index);
};

}

#endif // MEASUREMENTOBJECT_H
